package demo_leetcode_day;

/*
给定一个字符串 s，计算具有相同数量0和1的非空(连续)子字符串的数量，并且这些子字符串中的所有0和所有1都是组合在一起的。
重复出现的子串要计算它们出现的次数。
示例 1 :
输入: "00110011"
输出: 6
解释: 有6个子串具有相同数量的连续1和0：“0011”，“01”，“1100”，“10”，“0011” 和 “01”。
请注意，一些重复出现的子串要计算它们出现的次数。
另外，“00110011”不是有效的子串，因为所有的0（和1）没有组合在一起。
示例 2 :
输入: "10101"
输出: 4
解释: 有4个子串：“10”，“01”，“10”，“01”，它们具有相同数量的连续1和0。
注意：
s.length 在1到50,000之间。
s 只包含“0”或“1”字符。
*/

public class demo_20200810 {
    public static void main(String[] args) {
        System.out.println(new Solution().countBinarySubstrings("10101"));
    }
    static class Solution {
        final static char EMPTY = 'n';
        public int countBinarySubstrings(String s) {
            if(null== s || s.length() < 2) return 0;
            int count = 0;
            for (int index = 0; index < s.length() - 1; index++) {
                int i = index;
                int j = index+1;
                char left = EMPTY;
                while (i >= 0 && j < s.length()){
                    if (s.charAt(i) == s.charAt(j) || (EMPTY != left && left != s.charAt(i))) break;
                    if(EMPTY == left) left = s.charAt(i);
//                    System.out.println(s.substring(i,j+1));
                    count++;
                    i--;
                    j++;
                }
            }
            return count;
        }
    }
}
